package net.cassite.daf4j.ds;

import net.cassite.daf4j.OrderBase;
import net.cassite.daf4j.QueryParameterTypes;
import net.cassite.daf4j.Selectable;

import java.util.Map;

/**
 * QueryParameter解释器
 */
public interface QueryParameterParser<Context, BasicElement> extends AdvancedParser<Context, BasicElement> {
        /**
         * 解释 "取前几个" 的行为
         *
         * @param context 上下文
         * @param t       前t个
         * @throws Exception 可能的异常
         */
        void top(Context context, int t) throws Exception;

        /**
         * 解释 "取start到end" 的行为
         *
         * @param context 上下文
         * @param start   记录从start开始取
         * @param end     记录自end结束
         * @throws Exception 可能的异常
         */
        void limit(Context context, int start, int end) throws Exception;

        /**
         * 解释 "排序" 的行为
         *
         * @param context 上下文
         * @param orders  排序依据
         * @throws Exception 可能的异常
         */
        void orderBy(Context context, OrderBase[] orders) throws Exception;

        /**
         * 解释 "映射" 行为
         *
         * @param context    上下文
         * @param focusMap   需要解释的映射(字段=&gt;别名)
         * @throws Exception 可能的异常
         */
        void focus(Context context, Map<Selectable, String> focusMap) throws Exception;

        /**
         * 解释 "distinct" 行为
         *
         * @param context 上下文
         * @throws Exception 可能的异常
         */
        void distinct(Context context) throws Exception;
}
